package marina;

public class J16Ch05Printers {
	public static void main(String[] args) {
		J16Printer p = new J16Printer("중소기업", "번들프린터", "USB2.0");
		System.out.println(p.toString());
		J16InkjetPrinter ip = new J16InkjetPrinter("휴렛페커드", "잉크젯프린터", "USB3.0");
		System.out.println(ip.toString());
		
		J16PrinterService ps = new J16PrinterService();
		ps.print(p);
		ps.print(ip); //업캐스팅(부모 클래스의 형으로 변환이 자동으로 됨.)
		//이는 상속관계 때문에 가능한 것이다~~~
	}//main
}//class

class J16Printer {
	private String maker;
	private String model;
	private String interfaces;
	private int counts;
	private int remains;
	
	public J16Printer(String maker, String model, String interfaces) {
		this.maker = maker;
		this.model = model;
		this.interfaces = interfaces;
	}

	public String getMaker() {
		return maker;
	}

	public void setMaker(String maker) {
		this.maker = maker;
	}

	public String getModel() {
		return model;
	}

	public void setModel(String model) {
		this.model = model;
	}

	public String getInterfaces() {
		return interfaces;
	}

	public void setInterfaces(String interfaces) {
		this.interfaces = interfaces;
	}

	public int getCounts() {
		return counts;
	}

	public void setCounts(int counts) {
		this.counts = counts;
	}

	public int getRemains() {
		return remains;
	}

	public void setRemains(int remains) {
		this.remains = remains;
	}
	
	@Override
	public String toString() {
		String result = "제조사 : " + maker + "\n모델명 : " + model + 
				"\n인터페이스 : " + interfaces + "\n인쇄 매수 : " + counts + "\n인쇄 용지 잔량 : " + remains;
		return result;
	}
}

class J16InkjetPrinter extends J16Printer {

	public J16InkjetPrinter(String maker, String model, String interfaces) {
		super(maker, model, interfaces);
		// super() => 부모 클래스의 생성자를 가리키는 말 
	}
	//부모 클래스에 기본생성자가 정의되지 않았기 때문에 자식 클래스에서 따로 생성자를 정의해둬야 함.
	
}

class J16LaserPrinter extends J16Printer {
	public J16LaserPrinter(String maker, String model, String interfaces) {
		// TODO Auto-generated constructor stub
		super(maker, model, interfaces);
	}
}//J16InkjetPrinter

interface J16PrinterIService {
	void print(J16Printer p);
}//Interface

class J16PrinterService implements J16PrinterIService {

	@Override
	public void print(J16Printer p) {
		String result = p.getModel() + "가 문서를 출력합니다.";
		System.out.println(result);
	}
	
}